package com.sky.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; //编码：1成功，0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

/**
 * 操作成功的静态方法（不用返回得到的数据）
 * @param <T> 泛型类型，表示返回的数据类型
 * @return 返回一个成功的Result对象，code为1
 */
    public static <T> Result<T> success() {
        // 创建一个Result对象
        Result<T> result = new Result<T>();
        // 设置成功状态码为1
        result.code = 1;
        // 返回结果对象
        return result;
    }

/**
 * 操作成功的静态方法（返回得到的数据）
 * 这是一个泛型方法，可以用于任何类型T的返回结果
 *
 * @param object 要封装的成功返回的数据
 * @param <T> 泛型类型，表示返回数据的类型
 * @return 返回一个封装好的Result对象，其中data为传入的对象，code为1表示成功
 */
    public static <T> Result<T> success(T object) {
        //额外的<T>就是告诉编译器："这个方法很灵活，你让我造什么类型的盒子，我就造什么类型的！
    // 创建一个新的Result实例
        Result<T> result = new Result<T>();
    // 设置返回数据
        result.data = object;
    // 设置状态码为1，表示成功
        result.code = 1;
    // 返回封装好的结果
        return result;
    }

/**
 * 操作失败的静态方法
 * @param <T> 泛型类型，表示Result中数据的类型
 * @param msg 错误信息描述
 * @return 返回一个错误状态的Result对象，code为0，msg为传入的错误信息
 */
    public static <T> Result<T> error(String msg) {
        Result result = new Result();    // 创建一个新的Result对象
        result.msg = msg;                // 设置错误信息
        result.code = 0;                 // 设置错误码为0
        return result;                   // 返回配置好的Result对象
    }

}
